Apache POI ব্যবহার করে Excel (এবং অন্যান্য Office ফাইল) তৈরি বা সম্পাদনা করার সময় ডেটার পরিমাণ বেশি হলে কার্যকারিতা সমস্যা হতে পারে। যেমন, বড় ফাইল লোড বা ডেটা লিখতে অনেক সময় লাগতে পারে। এই ধরনের সমস্যা এড়ানোর জন্য বিভিন্ন Performance Tuning কৌশল ব্যবহার করা যেতে পারে। এই পোস্টে কিছু গুরুত্বপূর্ণ কৌশল আলোচনা করা হলো যেগুলি Apache POI ব্যবহার করে ডকুমেন্ট প্রসেসিংয়ের পারফরম্যান্স উন্নত করতে সহায়তা করবে।
১. SXSSF (Streaming User Model) ব্যবহার করা
SXSSF (Streaming XML Spreadsheet Format), Apache POI এর একটি বিশেষ ফিচার, যা large Excel files (অর্থাৎ, অনেক বড় ডেটা সম্বলিত ফাইল) তৈরির ক্ষেত্রে কার্যকরী। এটি XSSF এর একটি স্ট্রিমিং সংস্করণ, যা memory efficiency বৃদ্ধি করে। যখন আপনি বড় ডেটা এক্সপোর্ট করবেন তখন এটি র্যাম ব্যবহার কমিয়ে ফাইল সঞ্চয় করে।
কোড উদাহরণ: SXSSF ব্যবহার করে Excel ফাইল তৈরি করা
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class SXSSFExample {
public static void main(String[] args) throws IOException {
// SXSSFWorkbook তৈরি করা (XSSF এর স্ট্রিমিং সংস্করণ)
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 100 রো একসাথে মেমরিতে ধারণ করা হবে
// Sheet তৈরি করা
Sheet sheet = workbook.createSheet("Sheet1");
// ডেটা যোগ করা
for (int rowNum = 0; rowNum < 1000000; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int colNum = 0; colNum < 10; colNum++) {
Cell cell = row.createCell(colNum);
cell.setCellValue("Row " + rowNum + " Cell " + colNum);
}
}
// Excel ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("largeFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
System.out.println("Excel ফাইল সফলভাবে তৈরি করা হয়েছে!");
}
}
কোড ব্যাখ্যা:
SXSSFWorkbook: এটি এক্সেল শিটে বড় ডেটা প্রসেস করার সময় SXSSF (Streaming Excel format) ব্যবহার করে, যা কার্যকরীভাবে মেমরি ব্যবহারের পরিমাণ কমায়।new SXSSFWorkbook(100): এটি ১০০ রো পর্যন্ত মেমরিতে ধারণ করবে এবং অতিরিক্ত রো প্রসেস করতে disk-based প্রসেসিং করবে।
২. CellStyle পুনরায় ব্যবহার করা
Excel ফাইল তৈরি করার সময়, প্রতিটি সেলে আলাদা CellStyle প্রয়োগ করলে তা খুব বেশি মেমরি খরচ করতে পারে এবং পারফরম্যান্স কমিয়ে দিতে পারে। একাধিক সেলে একই CellStyle প্রয়োগ করতে পারেন, যা মেমরি এবং পারফরম্যান্স সংরক্ষণ করবে।
কোড উদাহরণ: একাধিক সেলে একই CellStyle ব্যবহার করা
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class CellStyleExample {
public static void main(String[] args) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// একবার CellStyle তৈরি করা
CellStyle style = workbook.createCellStyle();
style.setBorderBottom(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
// ডেটা যোগ করা
for (int i = 0; i < 1000; i++) {
Row row = sheet.createRow(i);
for (int j = 0; j < 10; j++) {
Cell cell = row.createCell(j);
cell.setCellValue("Row " + i + " Cell " + j);
cell.setCellStyle(style); // পুনরায় একই স্টাইল প্রয়োগ করা
}
}
// Excel ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("styledFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
System.out.println("Excel ফাইল সফলভাবে তৈরি করা হয়েছে!");
}
}
কোড ব্যাখ্যা:
- এখানে, আমরা একবার CellStyle তৈরি করে সেটি প্রতিটি সেলে প্রয়োগ করেছি। এর ফলে, মেমরি ব্যবহারের পরিমাণ কমবে এবং পারফরম্যান্স উন্নত হবে।
৩. Workbooks এবং Sheets এর জন্য প্রপার্টি ব্যবহার করা
প্রতিটি Workbook এবং Sheet তৈরি করার সময় কিছু প্রপার্টি সেট করতে পারেন, যা পারফরম্যান্স বাড়াতে সাহায্য করবে। যেমন, ফাইল তৈরি করার সময় ডিফল্ট Excel style ব্যবহার করার চেয়ে আপনার কাস্টম স্টাইল প্রয়োগ করা আরও দ্রুত হতে পারে।
৪. XSSF ফাইলের জন্য XMLBeans কম্প্রেশন সক্ষম করা
XSSF ফাইলের জন্য আপনি XMLBeans compression সক্ষম করতে পারেন, যা ফাইলের সাইজ কমাতে সাহায্য করবে এবং পারফরম্যান্স বাড়াবে। এই কম্প্রেশন ডকুমেন্টের সাইজ কমাতে কার্যকরী।
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
public class CompressionExample {
public static void main(String[] args) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
// XmlOptions দিয়ে কম্প্রেশন সক্ষম করা
XmlOptions options = new XmlOptions();
options.setSaveCompressed(true);
// XMLBeans দিয়ে কনফিগারেশন
XmlObject xml = workbook.getPackage();
XmlCursor cursor = xml.newCursor();
cursor.toEndToken();
// ফাইল সেভ করা
FileOutputStream fileOut = new FileOutputStream("compressedFile.xlsx");
workbook.write(fileOut);
fileOut.close();
// Workbook বন্ধ করা
workbook.close();
}
}
৫. Row Cache এবং Cell Cache ব্যবহার করা
SXSSF এবং XSSF এ একাধিক রো এবং সেল প্রক্রিয়াকরণের জন্য আপনি Row Cache এবং Cell Cache ব্যবহার করতে পারেন। এর মাধ্যমে, সেলের ডেটা মেমরিতে অনেক সময় ধরে রাখা হয়, এবং পরবর্তীতে সেই ডেটা দ্রুত ব্যবহার করা যায়।
কোড উদাহরণ: Row এবং Cell Cache ব্যবহার করা
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 100 রো পর্যন্ত মেমরি ক্যাশে রাখা
workbook.setCompressTempFiles(true); // অস্থায়ী ফাইল কম্প্রেস করা
৬. Parallel Processing (Multithreading) ব্যবহার করা
যখন আপনি বড় ডেটা প্রসেস করছেন, তখন Multithreading ব্যবহার করে আপনি একাধিক থ্রেডে কাজ ভাগ করতে পারেন। তবে এটি Apache POI এর জন্য একটু জটিল হতে পারে, কারণ POI সিঙ্ক্রোনাস কাজ করে। তবে আপনি ExecutorService বা CompletableFuture এর মাধ্যমে প্রসেসিং স্পিড উন্নত করতে পারেন।
উপসংহার
Apache POI এর মাধ্যমে Excel ফাইল ম্যানিপুলেশন বা অন্যান্য Office ফাইল প্রক্রিয়া করার সময় পারফরম্যান্স উন্নত করার জন্য কিছু কার্যকর কৌশল রয়েছে:
- SXSSF ব্যবহার করে মেমরি ব্যবহারের পরিমাণ কমানো
- একাধিক সেলে একই CellStyle ব্যবহার করে মেমরি সংরক্ষণ
- XMLBeans compression সক্ষম করে ফাইল সাইজ কমানো
- Row Cache এবং Cell Cache ব্যবহার করা
- Parallel Processing বা Multithreading প্রয়োগ করা
এই কৌশলগুলির মাধ্যমে আপনি বড় ডেটা প্রসেসিংয়ের সময় Apache POI এর পারফরম্যান্স উন্নত করতে পারেন।
Read more